﻿using ConfigServices;
//using LogServices;
using MailServices;
using Microsoft.Extensions.DependencyInjection;
namespace ConsoleMailSender
{
    internal class Program
    {
        static void Main(string[] args)
        {
            IServiceCollection services = new ServiceCollection();
            /*

            //services.AddScoped<ILogProvider, ConsoleLogProvider>();

            //这里使用了自定义扩展方法来注册日志服务
            services.AddLogServices();


            //services.AddScoped<IConfigService, EnvVarConfigService>();

            //注意这里使用了工厂方法来传递参数
            //services.AddScoped<IConfigService>(sp=>new IniFileConfigService() { FilePath="Mail.ini"});

            //这里使用了自定义扩展方法来注册配置服务
            services.AddConfigServices("Mail.ini");


            services.AddScoped<IMailService,MailServiceImpl>();
            */

            //可覆盖的配置服务注册
            //先从文件读取配置，再从环境变量读取配置，以后面读取的为准

            services.AddConfigServices("Mail.ini"); //从文件读取配置
            services.AddScoped<IConfigService, EnvVarConfigService>();  //从环境变量读取配置，覆盖前面的注册。环境变量配置：vs-项目-右键-属性-调试-环境变量
            services.AddLayeredConfigReader();  //使用分层配置读取器

            services.AddScoped<IMailService,MailServiceImpl>();
            services.AddLogServices();

            using (var serviceProvider = services.BuildServiceProvider())
            {
                //第一个根对象只能用ServiceLocator获取
                var mailService = serviceProvider.GetRequiredService<IMailService>();
                mailService.SendEmail("测试邮件","a","b");
            }
        }
    }
}
